From 038236d42b3d811723c7bc1e61e9d1c3fbc72efb Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Sat, 20 Nov 2004 04:52:57 +0000 Subject: [PATCH] Merged from gtk-2-4: 2004-11-19 Federico Mena Quintero Merged from gtk-2-4: Fix #158475: * gtk/gtkpathbar.c (make_directory_button): Make the button a drag source. (button_drag_data_get_cb): New callback to let us drag the button's path as a text/uri-list. --- ChangeLog | 11 +++++++++++ ChangeLog.pre-2-10 | 11 +++++++++++ ChangeLog.pre-2-6 | 11 +++++++++++ ChangeLog.pre-2-8 | 11 +++++++++++ gtk/gtkpathbar.c | 41 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 85 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9356db4a8a..db8c867512 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2004-11-19 Federico Mena Quintero + + Merged from gtk-2-4: + + Fix #158475: + + * gtk/gtkpathbar.c (make_directory_button): Make the button a drag + source. + (button_drag_data_get_cb): New callback to let us drag the + button's path as a text/uri-list. + 2004-11-19 Federico Mena Quintero Merged from gtk-2-4: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 9356db4a8a..db8c867512 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,14 @@ +2004-11-19 Federico Mena Quintero + + Merged from gtk-2-4: + + Fix #158475: + + * gtk/gtkpathbar.c (make_directory_button): Make the button a drag + source. + (button_drag_data_get_cb): New callback to let us drag the + button's path as a text/uri-list. + 2004-11-19 Federico Mena Quintero Merged from gtk-2-4: diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 9356db4a8a..db8c867512 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,14 @@ +2004-11-19 Federico Mena Quintero + + Merged from gtk-2-4: + + Fix #158475: + + * gtk/gtkpathbar.c (make_directory_button): Make the button a drag + source. + (button_drag_data_get_cb): New callback to let us drag the + button's path as a text/uri-list. + 2004-11-19 Federico Mena Quintero Merged from gtk-2-4: diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 9356db4a8a..db8c867512 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,14 @@ +2004-11-19 Federico Mena Quintero + + Merged from gtk-2-4: + + Fix #158475: + + * gtk/gtkpathbar.c (make_directory_button): Make the button a drag + source. + (button_drag_data_get_cb): New callback to let us drag the + button's path as a text/uri-list. + 2004-11-19 Federico Mena Quintero Merged from gtk-2-4: diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c index 8ebbf9c754..fdc29b391f 100644 --- a/gtk/gtkpathbar.c +++ b/gtk/gtkpathbar.c @@ -24,6 +24,7 @@ #include "gtktogglebutton.h" #include "gtkalignment.h" #include "gtkarrow.h" +#include "gtkdnd.h" #include "gtkimage.h" #include "gtkintl.h" #include "gtkicontheme.h" @@ -1067,6 +1068,34 @@ find_button_type (GtkPathBar *path_bar, return NORMAL_BUTTON; } +static void +button_drag_data_get_cb (GtkWidget *widget, + GdkDragContext *context, + GtkSelectionData *selection_data, + guint info, + guint time_, + gpointer data) +{ + ButtonData *button_data; + GtkPathBar *path_bar; + char *uri; + char *uri_list; + + button_data = data; + path_bar = GTK_PATH_BAR (widget->parent); /* the button's parent *is* the path bar */ + + uri = gtk_file_system_path_to_uri (path_bar->file_system, button_data->path); + uri_list = g_strconcat (uri, "\r\n", NULL); + g_free (uri); + + gtk_selection_data_set (selection_data, + selection_data->target, + 8, + uri_list, + strlen (uri_list)); + g_free (uri_list); +} + static ButtonData * make_directory_button (GtkPathBar *path_bar, const char *dir_name, @@ -1074,6 +1103,10 @@ make_directory_button (GtkPathBar *path_bar, gboolean current_dir, gboolean file_is_hidden) { + const GtkTargetEntry targets[] = { + { "text/uri-list", 0, 0 } + }; + GtkWidget *child = NULL; GtkWidget *label_alignment = NULL; ButtonData *button_data; @@ -1134,6 +1167,14 @@ make_directory_button (GtkPathBar *path_bar, g_object_weak_ref (G_OBJECT (button_data->button), (GWeakNotify) button_data_free, button_data); + gtk_drag_source_set (button_data->button, + GDK_BUTTON1_MASK, + targets, + G_N_ELEMENTS (targets), + GDK_ACTION_COPY); + g_signal_connect (button_data->button, "drag-data-get", + G_CALLBACK (button_drag_data_get_cb), button_data); + return button_data; } -- 2.30.2